package com.whty.mariotools;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.whty.mariotools.DownloadFile;
/*
 * 从网络Url中下载文件
 */
public class DownloadFile {
	private static final Logger LOG = LoggerFactory.getLogger(DownloadFile.class);
	
	/**
     * 从网络Url中下载文件
     * @param urlStr
     * @param fileName
     * @param savePath
     * @throws IOException
     */
    public static void  downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{
    	LOG.info("下载的url："+urlStr);
    	LOG.info("保存的文件名fileName："+fileName);
    	LOG.info("保存的路径是："+savePath);
    	FileOutputStream fos=null;
        InputStream inputStream =null;
    	try{
    		URL url = new URL(urlStr);  
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
                    //设置超时间为3秒
            conn.setConnectTimeout(3*1000);
            //防止屏蔽程序抓取而返回403错误
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

            //得到输入流
             inputStream = conn.getInputStream();  
            //获取自己数组
            byte[] getData = readInputStream(inputStream);    

            //文件保存位置
            File saveDir = new File(savePath);
            if(!saveDir.exists()){
                saveDir.mkdir();
            }
            File file = new File(saveDir+File.separator+fileName);    
             fos = new FileOutputStream(file);     
            fos.write(getData); 
            if(fos!=null){
                fos.close();  
            }
            if(inputStream!=null){
                inputStream.close();
            }

            System.out.println("info:"+url+" download success"); 
    	}catch(Exception e){
    		System.out.println("下载文件"+fileName+"发生异常了");
    	}finally{
    		 if(fos!=null){
                 fos.close();  
             }
             if(inputStream!=null){
                 inputStream.close();
             }

    	}
    

    }



    /**
     * 从输入流中获取字节数组
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static  byte[] readInputStream(InputStream inputStream) throws IOException {  
        byte[] buffer = new byte[1024];  
        int len = 0;  
        ByteArrayOutputStream bos = new ByteArrayOutputStream();  
        while((len = inputStream.read(buffer)) != -1) {  
            bos.write(buffer, 0, len);  
        }  
        bos.close();  
        return bos.toByteArray();  
    }  

}
